package main

import (
	"fmt"
	"io"
	"net"
	"time"
	"zinx/Zinx/znet"
)

func main() {
	fmt.Println("[Client Start]Connection...")
	time.Sleep(1 * time.Second)
	// 连接服务器
	conn, err := net.Dial("tcp", "127.0.0.1:8999")
	if err != nil {
		fmt.Println("[Dial]err:", err)
		return
	}
	for {
		// 写数据给服务器
		// 定义数据包对象
		dp := znet.NewDataPack()
		// 封包1
		binaryPack1, err := dp.Pack(znet.NewMessage(1, []byte("hellow")))
		if err != nil {
			fmt.Println("[Pack]err:", err)
			return
		}
		// 发送
		if _, err := conn.Write(binaryPack1); err != nil {
			fmt.Println("[Write]err:", err)
			return
		}
		// 读取服务器返回的数据
		// 读取包头
		binaryHead := make([]byte, dp.GetHeadLen())
		if _, err := io.ReadFull(conn, binaryHead); err != nil {
			fmt.Println("[Read Head]err:", err)
			break
		}
		// 拆包头
		msg, err := dp.Unpack(binaryHead)
		if err != nil {
			fmt.Println("[Unpack]err:", err)
		}
		// 缓存包体
		var data []byte
		if msg.GetDataLen() > 0 {
			data = make([]byte, msg.GetDataLen())
			if _, err := io.ReadFull(conn, data); err != nil {
				fmt.Println("[Read Msg]err:", err)
				break
			}
			// 获得数据
			msg.SetData(data)
			fmt.Printf("——>[Msg]ID: %d,Data: %s\n", msg.GetID(), msg.GetData())
		}

		// 阻塞间隔1s
		time.Sleep(1 * time.Second)
	}
}
